約 2,204,185 件
https://w.atwiki.jp/wadaisenryaku2/pages/598.html
目次 目次 バイナリ編集概要 セクタ構造 巨大なデータの差し替えは困難 セクタ構造2 ファイルインデックス 改造におけるインデックス利用 バイナリ編集概要 CDイメージをバイナリエディタで編集することで、ゲームデータの改変が可能。 改造コードでは実現が難しい、セーブデータだけでは保持されないデータの改造はもちろん、 大規模編集によるオリジナルデータの作成なども可能となる。 基本的な考えは改造コードと同じであり、 ファイルの位置、データの位置、値の役割を把握した上で、そこのデータを書き換えれば望みの結果を得られる。 しかし改造範囲が大規模になると、CD-ROM形式の特有のデータの並び方など、いくつか把握しておくべき論点が生じる。 セクタ構造 CDイメージをマウントし、エキスプローラ等で開くと、中の「実データ」を閲覧・抽出することができる。 この時のファイルAのデータ列の状態を以下とする。 ファイルA しかし、CDイメージそのものをバイナリエディタで開き、データAの部分に移動すると、 A1 仕切 A2 仕切 A3 仕切 A4 ・・・ このように、データAが一定単位ごとに別の「仕切りデータ」で分割されていることが分かる。 この時、A1、A2、A3・・・を結合していくとファイルAと一致する。 これがCD-ROM形式におけるセクタの構造である。 仕切りデータのサイズは304(130h)バイト +仕切られた実データの分割単位は2048(800h)バイト =これがセットで1セクタ、計2352(930h)バイトとなる。 以下は304バイトの仕切りデータの見本。実際にはセクタ毎のヘッダー、エラー訂正符号などの役割を担う。 XXにはランダムなデータが入るが、先頭と末尾に特徴的な00とFFの並びが現れるため、慣れれば見分けることができる。 XX XX XX XX 00 00 00 00 00 00 00 00 XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX FF FF FF FF FF FF FF FF FF FF XX XX XX XX XX 仕切りデータそのものは全く解析できていないが、する必要も恐らくない。 少なくともこれまでの試行では、仕切りデータを弄ることなく改造データは上手く動いている。 巨大なデータの差し替えは困難 差し替えやデータ移動の量が多くなる場合は面倒な事になる。例えばファイルAを改造したファイルA をAの位置に組み込む場合、 A を2048バイトずつのA 1、A 2、A 3・・・に分割しつつ、A1、A2、A3の位置に正確にコピペしていく作業が必要だ。 例えばBGMデータも上記原理で理論上は差し替え可能だが、ファイルサイズが巨大で数千セクタにも及ぶため、 手動で分割コピペしていくのは非現実的だ。よって改造は小~中規模に抑えるのが無難である。 プログラムで上記処理を行うツールが作れるならそれが一番だが、できない人は苦労することになる。 (ちなみに筆者はキーマクロを利用した自動コピペ法を考えたことがある) 仕切りデータの構造を無視してA の実データ列を丸ごと貼り付けてしまうことも不可能ではない(SSFが読んでくれた事例もある)が、 少なくともCD-ROMセクタ構造は失われ、Windowsエキスプローラではフォルダごと読めなくなるし、 ゲーム内でも不測のエラーが起こる可能性は十分にあり、あまり推奨できる方法ではない。 セクタ構造2 以上のようにファイルの差し替えにあたっては面倒な方式だが、利点もある。 ファイルの先頭データは必ずセクタの先頭に来るという特徴がある。 つまり、仕切りデータに着目するとファイルの開始位置が特定しやすい。 よってセクタで区切られた空間(実ファイルデータに使える空間)は2048バイトの倍数になる。 実際のファイルサイズが2048の倍数に満たない場合、余りの領域は00で満たされる。 よって00の羅列に着目するとファイルの終端位置を見積もれる場合もある。 ・・・ An-1 仕切 An(終端) 余り(0000...) 仕切 B1 仕切 B2 ・・・ 次にCDイメージにおける一番初めのセクタの実データ位置だが、 実はアドレス0(冒頭)ではなく、アドレス10h(17バイト目~)である。 以下に鋼鉄のアドレス0~のデータを載せる。 00 FF FF FF FF FF FF FF FF FF FF 00 00 02 00 01 53 45 47 41 20 53 45 47 41 53 41 54 55 52 4E 20 53 45 47 41 20 45 4E 54 45 52 50 52 49 53 45 53 47 53 39 30 32 35 20 20 20 20 56 31 2E 30 30 30 31 39 39 35 30 38 32 34 43 44 2D 31 2F 31 20 20 4A 54 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4A 4D 20 20 20 20 20 20 20 20 20 20 20 20 20 20 57 4F 52 4C 44 20 41 44 56 41 4E 43 45 44 20 44 41 49 53 45 4E 52 59 41 4B 55 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ~ 2行目(アドレス10h)~8行目「53 45 47 41 20 53 45 47 ~ 53 45 4E 52 59 41 4B 55」は ASCII形式で「SEGA SEGASATURN ~ WORLD ADVANCED DAISENRYAKU」を表すが、 その前の「00 FF FF FF FF FF FF FF FF FF FF 00 00 02 00 01」は先ほどの304バイトの仕切りデータの末尾16バイトに相当する。 つまり304バイトのうち、末尾16バイトは実はセクタのヘッダで、残りの288バイトはフッタということになる。 以上により、ファイルの実データは 10h+n×(2048+304) の位置にあると分かる。 これが次のファイルインデックスの話に繋がる。 ファイルインデックス アドレスB7D0~に移動すると、CDイメージ内のファイル名などが書かれたデータに遭遇する。 22 00 14 00 00 00 00 00 00 14 00 20 00 00 00 00 20 00 5F 08 18 0F 02 22 14 02 00 00 01 00 00 01 01 00 22 00 14 00 00 00 00 00 00 14 00 20 00 00 00 00 20 00 5F 08 18 0F 02 22 14 02 00 00 01 00 00 01 01 01 2E 00 31 00 00 00 00 00 00 31 14 1A 02 00 00 02 1A 14 5F 08 18 0F 02 22 14 00 00 00 01 00 00 01 0C 30 30 30 30 30 30 30 30 2E 42 49 4E 00 2C 00 23 8E 01 00 00 01 8E 23 00 C0 2F 00 00 2F C0 00 5F 08 18 0F 02 22 14 00 00 00 01 00 ~ 上記のうち冒頭のデータ(22 00 14 00~)は解説しづらいため、5行目途中の「2E 00 31 00 ~」から解説する。 結論から言えばこの「2E 00 31 00 ~」は「00000000.bin」を示すインデックスである。 2E: インデックス1件のデータサイズ。この場合は2Eの箇所から数えて46バイトでひとまとまり。 どうやら必ず2の倍数になっているらしい(後述) 00: 不明。多分特に意味のないクッションデータ。 31 00 00 00 00 00 00 31: 実データが格納されているセクタ番号。 リトルエンディアン4バイト(31 00 00 00)と、ビッグエンディアン4バイト(00 00 00 31)、 同じ値が両方の形式で格納されている。(エンディアンについてはWikipediaを参照) セクタ番号は16進で0から数えるため、31h+1=50番目のセクタを表す。先述の計算式により、 このファイルは 10h+31h×(2048+304)=アドレス1C240 以降にあるということになる。 14 1A 02 00 00 02 1A 14: 実データのファイルサイズ。 これもリトルエンディアン4バイトとビッグエンディアン4バイトで格納されている。 つまりこの場合は 21A14=137,748バイト。 5F 08 18 0F 02 22: 1バイトごとに年月日時分秒を表す。 作成日時と更新日時の区別はないため、エクスプローラ上では両方この日付時刻が表示される。 これをそのまま10進にすると(19)95/8/24 15 02 34である。 しかし実際は(日本では)これに+4時間した1995/8/24 19 02 34と表示される。 元データの15 02はUTC(世界標準時)でもないので、なぜこうなのかは良く分かっていない。 ※ なお、+4時間した結果日付が変わるようであれば繰り上げて表示される。 (例:作戦ファイル、FILM0000.CPK、日本時1995/8/16 2 46、元データは8/15 22 46) 14 00 00 00 01 00 00 01: 今のところ不明。ただしファイルでなくフォルダの場合は2バイト目が02に変化することは判明している。 0C:次に続くファイル名の文字数(データサイズ)つまり0C=12文字。 30 30 30 30 30 30 30 30 2E 42 49 4E:「00000000.bin」←ぴったり12文字 ASCII文字コード形式でファイル名を表す。ただしこのファイルは違うが、末尾になぜか「;1」(3B 31)が付く場合が殆どで、 その場合はファイル文字数も「;1」分までカウントされる(エクスプローラ上では「;1」は表示されない)。 00:多分ただのクッションデータ。ここまで46バイト、直後は次のインデックスになる。 なおこの00は無い場合がある。先述の通りインデックス1件のデータは必ず偶数になっている模様だが、 変動要因であるファイル名文字数自体は偶奇どちらもありうる。そこでこの00があるかないかで偶数に調整しているようだ。 改めて冒頭の「22 00 14 00~」を解析すると、 インデックスデータ量22バイト、セクタ番号14h(アドレスB7D0)、ファイルサイズ8,192バイト(4セクタ分)、 時刻(日本時)1995/8/24 19 02 34、続いて14 02 00 00 01 00 00 01(2バイト目が02なのでフォルダ属性を表す)、 ファイル名なし(ファイル名文字数は0ではなく1とされている) ※ 以上がなぜかほぼ2回繰り返されており、その後00000000.binのインデックスへと続く。 アドレスB7D0はこのファイルインデックスの冒頭と一致する。つまりこのCD-ROMの「ルートフォルダ」と推定される。 改造におけるインデックス利用 改造目的でインデックスを使うのであれば、 ・セクタ番号: 実データ格納アドレスを計算、あるいは参照セクタそのものを変えてしまう ・ファイルサイズ: 改造対象のファイルサイズを増やしたいときにここの値を変える などが重要になるだろう。 特にセクタ番号の情報は改造したいファイルの冒頭データをコピー → 検索だけでは限界がある場合に有効だ。 ただしファイルサイズを増やすのには上限がある(2048の倍数を超えると次のファイルのセクタ領域に行ってしまう) ので、より大規模な改造としては、CDイメージ全体の末尾にある大量の空白セクタを利用して、 ここに新たにファイルを書き込み、それをインデックスから参照させるといったこともできるかもしれない。 (あまり大きいファイルだと当面は困難ではあるが)
https://w.atwiki.jp/wadaisenryaku/pages/729.html
目次 目次 バイナリ編集概要 セクタ構造 巨大なデータの差し替えは困難 セクタ構造2 ファイルインデックス 改造におけるインデックス利用 バイナリ編集概要 CDイメージをバイナリエディタで編集することで、ゲームデータの改変が可能。 改造コードでは実現が難しい、セーブデータだけでは保持されないデータの改造はもちろん、 大規模編集によるオリジナルデータの作成なども可能となる。 基本的な考えは改造コードと同じであり、 ファイルの位置、データの位置、値の役割を把握した上で、そこのデータを書き換えれば望みの結果を得られる。 しかし改造範囲が大規模になると、CD-ROM形式の特有のデータの並び方など、いくつか把握しておくべき論点が生じる。 セクタ構造 CDイメージをマウントし、エキスプローラ等で開くと、中の「実データ」を閲覧・抽出することができる。 この時のファイルAのデータ列の状態を以下とする。 ファイルA しかし、CDイメージそのものをバイナリエディタで開き、データAの部分に移動すると、 A1 仕切 A2 仕切 A3 仕切 A4 ・・・ このように、データAが一定単位ごとに別の「仕切りデータ」で分割されていることが分かる。 この時、A1、A2、A3・・・を結合していくとファイルAと一致する。 これがCD-ROM形式におけるセクタの構造である。 仕切りデータのサイズは304(130h)バイト +仕切られた実データの分割単位は2048(800h)バイト =これがセットで1セクタ、計2352(930h)バイトとなる。 以下は304バイトの仕切りデータの見本。実際にはセクタ毎のヘッダー、エラー訂正符号などの役割を担う。 XXにはランダムなデータが入るが、先頭と末尾に特徴的な00とFFの並びが現れるため、慣れれば見分けることができる。 XX XX XX XX 00 00 00 00 00 00 00 00 XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX FF FF FF FF FF FF FF FF FF FF XX XX XX XX XX 仕切りデータそのものは全く解析できていないが、する必要も恐らくない。 少なくともこれまでの試行では、仕切りデータを弄ることなく改造データは上手く動いている。 巨大なデータの差し替えは困難 差し替えやデータ移動の量が多くなる場合は面倒な事になる。例えばファイルAを改造したファイルA'をAの位置に組み込む場合、 A'を2048バイトずつのA'1、A'2、A'3・・・に分割しつつ、A1、A2、A3の位置に正確にコピペしていく作業が必要だ。 例えばBGMデータも上記原理で理論上は差し替え可能だが、ファイルサイズが巨大で数千セクタにも及ぶため、 手動で分割コピペしていくのは非現実的だ。よって改造は小~中規模に抑えるのが無難である。 プログラムで上記処理を行うツールが作れるならそれが一番だが、できない人は苦労することになる。 (ちなみに筆者はキーマクロを利用した自動コピペ法を考えたことがある) 仕切りデータの構造を無視してA'の実データ列を丸ごと貼り付けてしまうことも不可能ではない(SSFが読んでくれた事例もある)が、 少なくともCD-ROMセクタ構造は失われ、Windowsエキスプローラではフォルダごと読めなくなるし、 ゲーム内でも不測のエラーが起こる可能性は十分にあり、あまり推奨できる方法ではない。 セクタ構造2 以上のようにファイルの差し替えにあたっては面倒な方式だが、利点もある。 ファイルの先頭データは必ずセクタの先頭に来るという特徴がある。 つまり、仕切りデータに着目するとファイルの開始位置が特定しやすい。 よってセクタで区切られた空間(実ファイルデータに使える空間)は2048バイトの倍数になる。 実際のファイルサイズが2048の倍数に満たない場合、余りの領域は00で満たされる。 よって00の羅列に着目するとファイルの終端位置を見積もれる場合もある。 ・・・ An-1 仕切 An(終端) 余り(0000...) 仕切 B1 仕切 B2 ・・・ 次にCDイメージにおける一番初めのセクタの実データ位置だが、 実はアドレス0(冒頭)ではなく、アドレス10h(17バイト目~)である。 以下に鋼鉄のアドレス0~のデータを載せる。 00 FF FF FF FF FF FF FF FF FF FF 00 00 02 00 01 53 45 47 41 20 53 45 47 41 53 41 54 55 52 4E 20 53 45 47 41 20 45 4E 54 45 52 50 52 49 53 45 53 47 53 39 30 32 35 20 20 20 20 56 31 2E 30 30 30 31 39 39 35 30 38 32 34 43 44 2D 31 2F 31 20 20 4A 54 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4A 4D 20 20 20 20 20 20 20 20 20 20 20 20 20 20 57 4F 52 4C 44 20 41 44 56 41 4E 43 45 44 20 44 41 49 53 45 4E 52 59 41 4B 55 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ~ 2行目(アドレス10h)~8行目「53 45 47 41 20 53 45 47 ~ 53 45 4E 52 59 41 4B 55」は ASCII形式で「SEGA SEGASATURN ~ WORLD ADVANCED DAISENRYAKU」を表すが、 その前の「00 FF FF FF FF FF FF FF FF FF FF 00 00 02 00 01」は先ほどの304バイトの仕切りデータの末尾16バイトに相当する。 つまり304バイトのうち、末尾16バイトは実はセクタのヘッダで、残りの288バイトはフッタということになる。 以上により、ファイルの実データは 10h+n×(2048+304) の位置にあると分かる。 これが次のファイルインデックスの話に繋がる。 ファイルインデックス アドレスB7D0~に移動すると、CDイメージ内のファイル名などが書かれたデータに遭遇する。 22 00 14 00 00 00 00 00 00 14 00 20 00 00 00 00 20 00 5F 08 18 0F 02 22 14 02 00 00 01 00 00 01 01 00 22 00 14 00 00 00 00 00 00 14 00 20 00 00 00 00 20 00 5F 08 18 0F 02 22 14 02 00 00 01 00 00 01 01 01 2E 00 31 00 00 00 00 00 00 31 14 1A 02 00 00 02 1A 14 5F 08 18 0F 02 22 14 00 00 00 01 00 00 01 0C 30 30 30 30 30 30 30 30 2E 42 49 4E 00 2C 00 23 8E 01 00 00 01 8E 23 00 C0 2F 00 00 2F C0 00 5F 08 18 0F 02 22 14 00 00 00 01 00 ~ 上記のうち冒頭のデータ(22 00 14 00~)は解説しづらいため、5行目途中の「2E 00 31 00 ~」から解説する。 結論から言えばこの「2E 00 31 00 ~」は「00000000.bin」を示すインデックスである。 2E: インデックス1件のデータサイズ。この場合は2Eの箇所から数えて46バイトでひとまとまり。 どうやら必ず2の倍数になっているらしい(後述) 00: 不明。多分特に意味のないクッションデータ。 31 00 00 00 00 00 00 31: 実データが格納されているセクタ番号。 リトルエンディアン4バイト(31 00 00 00)と、ビッグエンディアン4バイト(00 00 00 31)、 同じ値が両方の形式で格納されている。(エンディアンについてはWikipediaを参照) セクタ番号は16進で0から数えるため、31h+1=50番目のセクタを表す。先述の計算式により、 このファイルは 10h+31h×(2048+304)=アドレス1C240 以降にあるということになる。 14 1A 02 00 00 02 1A 14: 実データのファイルサイズ。 これもリトルエンディアン4バイトとビッグエンディアン4バイトで格納されている。 つまりこの場合は 21A14=137,748バイト。 5F 08 18 0F 02 22: 1バイトごとに年月日時分秒を表す。 作成日時と更新日時の区別はないため、エクスプローラ上では両方この日付時刻が表示される。 これをそのまま10進にすると(19)95/8/24 15 02 34である。 しかし実際は(日本では)これに+4時間した1995/8/24 19 02 34と表示される。 元データの15 02はUTC(世界標準時)でもないので、なぜこうなのかは良く分かっていない。 ※ なお、+4時間した結果日付が変わるようであれば繰り上げて表示される。 (例:作戦ファイル、FILM0000.CPK、日本時1995/8/16 2 46、元データは8/15 22 46) 14 00 00 00 01 00 00 01: 今のところ不明。ただしファイルでなくフォルダの場合は2バイト目が02に変化することは判明している。 0C:次に続くファイル名の文字数(データサイズ)つまり0C=12文字。 30 30 30 30 30 30 30 30 2E 42 49 4E:「00000000.bin」←ぴったり12文字 ASCII文字コード形式でファイル名を表す。ただしこのファイルは違うが、末尾になぜか「;1」(3B 31)が付く場合が殆どで、 その場合はファイル文字数も「;1」分までカウントされる(エクスプローラ上では「;1」は表示されない)。 00:多分ただのクッションデータ。ここまで46バイト、直後は次のインデックスになる。 なおこの00は無い場合がある。先述の通りインデックス1件のデータは必ず偶数になっている模様だが、 変動要因であるファイル名文字数自体は偶奇どちらもありうる。そこでこの00があるかないかで偶数に調整しているようだ。 改めて冒頭の「22 00 14 00~」を解析すると、 インデックスデータ量22バイト、セクタ番号14h(アドレスB7D0)、ファイルサイズ8,192バイト(4セクタ分)、 時刻(日本時)1995/8/24 19 02 34、続いて14 02 00 00 01 00 00 01(2バイト目が02なのでフォルダ属性を表す)、 ファイル名なし(ファイル名文字数は0ではなく1とされている) ※ 以上がなぜかほぼ2回繰り返されており、その後00000000.binのインデックスへと続く。 アドレスB7D0はこのファイルインデックスの冒頭と一致する。つまりこのCD-ROMの「ルートフォルダ」と推定される。 改造におけるインデックス利用 改造目的でインデックスを使うのであれば、 ・セクタ番号: 実データ格納アドレスを計算、あるいは参照セクタそのものを変えてしまう ・ファイルサイズ: 改造対象のファイルサイズを増やしたいときにここの値を変える などが重要になるだろう。 特にセクタ番号の情報は改造したいファイルの冒頭データをコピー → 検索だけでは限界がある場合に有効だ。 ただしファイルサイズを増やすのには上限がある(2048の倍数を超えると次のファイルのセクタ領域に行ってしまう) ので、より大規模な改造としては、CDイメージ全体の末尾にある大量の空白セクタを利用して、 ここに新たにファイルを書き込み、それをインデックスから参照させるといったこともできるかもしれない。 (あまり大きいファイルだと当面は困難ではあるが)
https://w.atwiki.jp/javastudy/pages/35.html
第7章 ★バイナリの読み書き ■バイナリファイルの読み込み手順 ①ファイルを開く FileStream(ストリームクラス)のオブジェクトを生成してファイルを読み込む FileInputStream in = new FileInputStream (“file3.dat”); ←ファイル生成 ②データを読み込む readメソッドを使用する。読み込んだ1バイトデータをint型で返す。 読み込むデータがなくなるとー1を返す。 Int c; c = in.read(); ③ファイルを閉じる close()メソッドを使用 in.close(); ■バイナリファイルの書き出し手順 ①ファイルを開く FileOutputStream(ストリームクラス)のオブジェクトを生成してファイルを書き出す FileOutputStream out = new FileOutputStream (“file4.dat”); ←この名前でファイル生成 ②データを書き出す write()メソッドを使用する。引数として与えたデータをファイルに書き出す。 引数にはint型かbyte型の値を指定 out.write(65); ③ファイルを閉じる close()メソッドを使用 out.close(); ■文字ストリームへの変換 InputStreamReader バイナリ入力→文字入力へ変換 バイナリデータを読み込むオブジェクトを引数として受け取る FileInputStream ifile = new FileInputStream(“file5.dat”); InputStreamReader in = new InputStreamReader(ifile); ↑オブジェクト名 ↑InputStreamReaderクラスのオブジェクト OutputStreamReader バイナリ出力→文字出力へ変換 バイナリデータを読み込むオブジェクトを引数として受け取る FileOutputStream ofile = new FileOutputStream(“file5.dat”); OnputStreamReader out = new OutputStreamReader(ofile); ↑オブジェクト名 ↑OutputStreamReaderクラスのオブジェクト ■ サンプルプログラム import java.io.*; class InOut { public static void main(String[] args) { try { String filename = "file.dat"; FileOutputStream out = new FileOutputStream(filename); FileInputStream file = new FileInputStream(filename); InputStreamReader in = new InputStreamReader(file); for(byte i = 1; i = 10; i++) { out.write(i); } int c; while((c = in.read()) != -1) { System.out.print(c + " "); } in.close(); out.close(); } catch (IOException e) { System.out.println("ファイルがありません。"); } } }
https://w.atwiki.jp/ttmario64/pages/59.html
ツールでやれることには限度があります。 そこで、みんなで情報を出し合っていろいろできるようにしよう。 文章の変更 104 :名無しさん@お腹いっぱい。:2008/04/19(土) 19 48 43 ID e+6alxeU 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 0 A B C D E F 1 G H I J K L M N O P Q R S T Y V 2 W X Y Z a b c d e f g h i j k l 3 m n o p q r s t u v w x y z . ok? 見やすくしましたBY e+6alxeU 39 :名無しさん@お腹いっぱい。:2008/04/15(火) 22 49 38 ID ewwLoIPq 01 =1 02 =2 03 =3 04 =4 05 =5 06 =6 07 =7 08 =8 09 =9 0A =A 0B =B 0C =C 0D =D 0E =E 0F =F 10 =G 11 =H 12 =I 13 =J 14 =K 15 =L 16 =M 17 =N 18 =O 19 =P 1A =Q 1B =R 1C =S 1D =T 1E =U 1F =V 20 =W 21 =X 22 =Y 23 =Z 24 =a 25 =b 26 =c 27 =d 28 =e 29 =f 2A =g 2B =h 2C =i 2D =j 2E =k 2F =l 30 =m 31 =n 32 =o 33 =p 34 =q 35 =r 36 =s 37 =t 38 =u 39 =v 3A =w 3B =x 3C =y 3D =z 3E = 3F = . 50 = ↑ 51 = ↓ 52 = ← 53 = → 54 = (ふとい)A 55 = B 56 = C 57 = Z 58 = R 6F = , 9E = スペース 9F = -(ハイフン) D1 = the D2 = you E1 = ( E2 = 「 )(」←みたいな「)(」の左に点がついたもの E3 = ) E4 = ←→ E5 = E6 = F2 = ! F3 = % F4 = ? F5 = “ F6 = ” F7 = ~ F9 = コインのマーク FA = ★ FB = × FC = ・ FD = ☆ FE = 改行 FF = 終了コマンド バイナリでいじれる文章の場所
https://w.atwiki.jp/pokemonbug/pages/24.html
バイナリエディタ メモリエディタ、RAMエディタとも。 RAMを自由自在に編集できるプログラム。任意コード実行の最高到達点の一つ。 これがあればもはや書き換え系のコードをいちいち作成する必要性がなくなり、任意コード実行用のプログラムの書き込みも非常に容易になる。 思わぬ範囲まで効果が及ぶ可能性があるので危険が伴います。実験・使用・使用後のセーブには充分注意しましょう。 目次 簡易型バイナリエディタ(flag3式) バイナリエディタの導入を楽にするための入力ツール。メールとボックスを使って書く。 おまけ:バイナリエディタをボックス6に退避させる もしもに備えて余裕があったら退避を。ちなみにボックス6にするのはsRAMバンクが違うから。 豪華版バイナリエディタ(Teraman式、344バイト) 機能が多く欲しい人やバグ図鑑・分類違いわざマシン両対応のバイナリエディタが欲しい人向け。開始位置を保存できる。 バイナリエディタ(flag3式、185バイト) 簡単に導入したい人向け。バグ図鑑での起動と分類違いわざマシンでのバックからの起動で細部を変える必要がある。両対応しました。 簡易型バイナリエディタ(Teraman式) 動画で紹介されている方法の補足。wRAMへの書き込みを前提としている。 簡易型バイナリエディタ旧版(クリスタル専用) 昔はちまちま書き込んでいました。 簡易型バイナリエディタ(flag3式) 参考資料 ポケモン金銀にバイナリエディタを移植したお話 - flag3833753 ポケモンクリスタルにおけるバイナリエディタ - flag3833753 2023/12/11更新!コードの見直しにより修正用メールが1通になりました。 最後に読んだメールからの任意コード実行を可能にした状態で、ボックスの名前を下記のものに書き換える。 (金銀は図鑑モード06hを利用してCF40hへ、クリスタルは図鑑モード0ChでD021hに飛ぶことを想定する) ボックス1の「がヲ」とボックス2の「ぜナ」の部分が簡易型バイナリエディタの開始位置(この場合はAA94h)となる。 これはSRAM03hのオープンと合わせることで、バイナリエディタの本体をボックス9に書き込むものとなる。 金銀 ぼギダへマだがヲ ぜナョダだグぼダ ぞてはりダムキづ ごヅまてぱへごまぴ へごまボぷへごま へォわたしひ ぐイ゛ど ダれへリダだイ゛ざ ダダれャだダだな ぼヂてはリ 入力不可能な文字がある(「わたし」も1文字)ため、下記メールで修正を行う。 ぼぴがリぜゆづぜゅよダづにひぜ? ずづぜ8ひラづのののののののだっ 文末の「だっ」は「てパま」(jp CF40)を使用する場合に対応するもの。 クリスタル ぼギダへマぞがヲ ぜナョダだグぼダ ぞてアろダムキづ ごヅまとぱへジみぴ へジみボぷへジみ へブばん どうろひ ぐイ゛ど ダれエろダだイ゛ざ ダダれャぞダだな ぼヂてアろだあ 入力不可能な文字がある(「ばん どうろ」も1文字)ため、下記メールで修正を行う。 ぼぴがろぜシづぜネよヂづにふぜフ づぜヨづののののののののののだっ ボックスの入力が終わったら、下記のメールを読んでコードを実行すると、簡易型バイナリエディタが起動する。 2023/12/11更新!バグ図鑑モード・分類違いわざマシンの両方に対応しました。 金銀 へロどへュでていリなひだへづまち ぼダメに0ぞ?ムぞボデのののだっ ※「ののだっ」はCF40hから実行する場合のみ必要。 クリスタル へなづへつぢておろなひだへドみち ぼダメに0ぞ?ムぞボデのののだっ ※「ののだっ」はD021h(図鑑モード0Ch)から実行する場合のみ必要。 操作方法 左4桁にアドレスが表示され、右2桁が数値となる。 専用のフォントを呼び出せていない関係で、ABCの3文字が文字化けしている。 起動のたびにメールを読み直す必要がある点に注意。 数値の対応表 数値(文字) バッグ 図鑑 A ■ g B ▲ 青色の線 C 携帯マーク 携帯マーク キー入力 キー 操作 A 指すアドレスを+01h B 指すアドレスを-01h 下 指しているアドレスの内容を+01h 上 指しているアドレスの内容を-01h 左 指しているアドレスの内容を+10h 右 指しているアドレスの内容を-10h START 簡易型バイナリエディタを終了 この簡易型バイナリエディタを使って、ボックス9の中にバイナリエディタのコードを打ち込んでいく。 開始地点であるAA94hから書き込むと預け数が異常な数になってしまうため、 AA94に崩壊防止のため1Eh AAB3に終端をあらわすFFh を入れ、AAB4から書き込み始めるとよさそう。 AA95~AAB2は、00hで埋めておくと見た目は誰もいないのにボックスがいっぱいという状況になるが、ボックス整理で無理やり上限突破をすることもできてしまうため、不安なら01h(フシギダネ)やFDh(タマゴ)などで埋めておくのが無難。一応、344バイトのデータはポケモン11匹分で収まるようになっている。 紹介するのはこちら。 豪華版バイナリエディタ(Teraman式、344バイト) 機能が多く欲しい人やバグ図鑑・分類違いわざマシン両対応のバイナリエディタが欲しい人向け。開始位置を保存できる。 バイナリエディタ(flag3式、185バイト) 簡単に導入したい人向け。バグ図鑑での起動と分類違いわざマシンでのバックからの起動で細部を変える必要がある。両対応しました。 おまけ:バイナリエディタをボックス6に退避させる 入力ミスがあった場合、ボックス7~9のデータが消し飛ぶ可能性がある(逆にボックス1~6が被害にあう可能性もなくはないけれど…)ため、余裕があるならボックス6にバイナリエディタのデータを退避させておくとリカバリーが容易になる。 現在ボックスの番号が金銀ではD8AFh、クリスタルではDB65hに記録されており、ここを書き換えてからレポートを書くことでボックスをコピーすることができる。 具体的には以下の手順となる。 コピー元のボックスに切り替える。 現在ボックスのアドレスをコピー先のものに書き換える。 ボックスの番号は00hから始まる点に注意。(そのためボックス9は08h、ボックス6は05hになる) レポートを書く。(STARTメニューからでいい) 退避:ボックス9→ボックス6※要実行後レポート 金銀 ヅョリぼガデの空空空空空空空空空 空空空空空空空空空空空空空空だっ クリスタル ヅはろひびぼガデの空空空空空空空 空空空空空空空空空空空空空空だっ 復元:ボックス6→ボックス9※要実行後レポート 金銀 ヅョリぼゲデの空空空空空空空空空 空空空空空空空空空空空空空空だっ クリスタル ヅはろひびぼゲデの空空空空空空空 空空空空空空空空空空空空空空だっ 以下旧版。こちらはバイナリエディタの記述部分を一時領域経由でコピーするコードになる。 SRAMバンクが違うため、コピーはWRAMを経由してメール2通に分ける。 実行時に使うものと一時コピー先は同じなので、退避終了後に金銀では「てぬわ」、クリスタルでは「てあめ」でコードを実行してテストしてしまうのもいいだろう。 ※flag3式バイナリエディタ(金銀版)の場合はアドレスDCC6hから始めているので、アドレスの指定を「にわ」にすることを推奨。 退避:ボックス9(03h AAB4h)→ボックス6(02h BA92h) 金銀1 ョぶぺぶぶヅぬわがヲぜえへマだ空 ゾパひァへよだてャだ空空空空だっ 金銀2 ョぶぺぶヅテこがわぜぬへマだ空空 ゾパひァへよだてャだ空空空空だっ クリスタル1 ョぶぶぺぶヅあめがヲぜえへマぞ空 ゾパひァへ/ぞてャぞ空空空空だっ クリスタル2 ョぶぶぺヅテこがめぜあへマぞ空空 ゾパひァへ/ぞてャぞ空空空空だっ 復元:ボックス6(02h BA92h)→ボックス9(03h AAB4h) 金銀1 ョぶぺぶヅぬわがこぜテへマだ空空 ゾパひァへよだてャだ空空空空だっ 金銀2 ョぶぺぶぶヅえヲがわぜぬへマだ空 ゾパひァへよだてャだ空空空空だっ クリスタル1 ョぶぶぺヅあめがこぜテへマぞ空空 ゾパひァへ/ぞてャぞ空空空空だっ クリスタル2 ョぶぶぺぶヅえヲがめぜあへマぞ空 ゾパひァへ/ぞてャぞ空空空空だっ 豪華版バイナリエディタ V2(Teraman式、344バイト) 参考資料(最新版の情報あり) 簡単!?バイナリエディタ導入! ポケモン第二世代任意コード実行講座 Part.08【VOICEROID紲星あかり】 本体のコードは長くなるので最後に記載。なお、簡易型バイナリエディタは上記の動画とはプロセスの違うものである点に注意。 実行用コード SRAM内にあるままだと実行時に不便なため、WRAM内の適当なアドレスに内容をコピーして使用する。 コピー先として使用するDCC7h(金銀)、D2B1h(クリスタル)は戦闘時に敵パーティの中身が入る領域。非戦闘時には自由に利用できる。 ※AAB4hからのコピーなので、AA94hからコピーする場合は「ガヲぜえ」の「え」を「ナ」にする。 金銀 ョぶぺぶぶヅぬわがヲぜえへマだ空 ゾパひァへよだへャだてぬわ空だっ クリスタル ョぶぶぺぶヅあめがヲぜえへマぞ空 ゾパひァへ/ぞへャぞてあめ空だっ メールでの実行が確認出来たら簡易型バイナリエディタは不要になるので、ボックスからの実行にするといちいちメールを読む必要がなくなり、他のメール使用コードを持ち運びやすくなる…かも。 金銀 ョぶぺぶがヲぜえ ヅぬわぶヘマだゆ むゾパひァへよだ へャだてぬわ クリスタル(始点はDB68h) ョぶぶぺがヲぜえ ヅあめぶヘマぞゆ むゾパひァへォぞ へャぞてあめ 金銀版の場合は以下のニョロボンを作って手持ち3匹目に置くと、わざマシン17から一発でバイナリエディタに飛べる。 経験値や努力値にコードを書きこんでいる関係上、戦闘で経験値が入ると崩壊することに注意。 Teraman式バイナリエディタ実行用ニョロボン 内容 数値 ニモニック 種族 ニョロボン 3E ld a,03 持ち物 ひかりのこな 03 技1 ころがる CD call 309D 技2 いわなだれ 9D 技3 ちょうおんぱ 30 技4 たいあたり 21 ld hl,AAB4 ID 46250 B4 AA 経験値 90113 (Lv.46) 01 ld bc,0160 60 01 H努力値 4551 (H152) 11 ld de,DCC7 C7 A努力値 56525 (A121) DC CD call 30D6 B努力値 54832 (B125) D6 30 S努力値 52653 (S107) CD call 30AD AD C努力値 12483 (C93/D111) 30 C3 jp DCC7 AB個体値 A12/B7 C7 SC個体値 S13/C12 DC クリスタル版の場合は分類違いわざマシンの実行位置に以下のコードを書き込むのも有効。(21バイト) 3E 03 CD 9D 2F 21 B4 AA 11 B1 D2 01 60 01 D5 CD F2 2F C3 AD 2F ; ld a,03→call 2F9D→ld hl,AAB4→ld de,D2B1→ld bc,0160→push de→call 2FF2→jp 2FAD 画面表示 左から順に、 ROM、sRAMバンクナンバー アドレス カーソル、書き込みモード時は白抜きになる 左のアドレスに格納されている値 操作方法 通常モード キー 操作 上 アドレスを-01h 下 アドレスを+01h 左 アドレスを-10h 右 アドレスを+10h SERECT+上 アドレスを+100h SERECT+下 アドレスを-100h SERECT+左 アドレスを-1000h SERECT+右 アドレスを+1000h START+上 バンクを+01h START+下 バンクを-01h START+左 バンクを-10h START+右 バンクを+10h A 書き込みモードに移行 B バイナリエディタを終了 START+A カーソル位置のプログラム実行 書き込みモード キー 操作 上 数値を+01h 下 数値を-01h 左 数値を-10h 右 数値を+10h SERECT 数値を00hにする A 数値を書き込む B 書き込みをキャンセル 説明 簡易型バイナリエディタでは1バイトずつしかアドレスを表示できなかったが、豪華版では画面全体を使って16バイト分のアドレスを表示できるようになっている。 他にも桁ごとの増減、ROMバンク切り替え、プログラムの実行などの高度な機能が実装されている。 ちなみにvRAMおよびwRAMのバンク切り替え機能は付いていないが、これはどちらも必要になる状況が非常に限られている上、実装に非常に手間と容量がかかるためである。 このバイナリエディタには開始アドレスとROMバンクの情報を記録する機能があるが、この情報は「おかあさん」の名前データ(未使用)に書き込まれている。(金銀ではD1BBh~、クリスタルではD494h~) これで不具合が起こるのは意図的に文字列49h(通常なら「おかあさん」と表示される)を表示したときぐらいである。 仕様上、sRAM内のデータを弄ろうとすると書き込みモード開始時に初期値が現在値と関係なくFFhになってしまうことに(最初は書き込み前の値が表示されることを含めて)注意。 書き込むコード 金銀(書き込み先はDCC7h~) cd a8 34 11 b2 4e 21 00 90 01 23 3e cd 76 0e cd b4 0e cd 87 0d cd 95 0d cd b8 33 f0 9f f5 21 bb d1 2a 47 2a 4f 56 3e ed ea e2 c3 c5 7a cd 9d 30 d7 21 a0 c3 cd 26 dd d5 11 14 00 19 d1 1e 10 78 cd 26 dd 79 cd 26 dd 23 0a cd 26 dd 03 d5 11 0d 00 19 d1 1d 20 e9 c1 cd ad 30 cd 37 dd 18 cc c5 0e 02 47 cb 30 3e 0f a0 c6 f6 22 0d 20 f5 c1 c9 c5 cd f4 36 c1 67 f0 aa cb 5f 20 1e cb 57 20 30 cb 7c 20 3e cb 74 20 3c cb 6c 20 3a cb 64 20 3b cb 4c 20 3e cb 44 20 6c 18 d6 cb 7c 20 4b cb 74 20 49 cb 6c 20 47 cb 64 20 47 cb 44 20 30 18 e0 cb 7c 20 42 cb 74 20 40 cb 6c 20 3e cb 64 20 3f 18 ce 03 c9 0b c9 21 f0 ff 18 03 21 10 00 09 44 4d c9 21 bb d1 78 22 79 22 72 f1 f1 d7 c9 c5 d5 7a 21 02 00 09 cf d1 c1 c9 15 c9 14 c9 3e f0 18 02 3e 10 82 57 c9 05 c9 04 c9 21 00 f0 18 cf 21 00 10 18 ca 03 03 0a 5f 21 e2 c3 3e ec 77 c5 cd f4 36 c1 cb 7f 20 1a cb 77 20 19 cb 6f 20 19 cb 67 20 19 cb 57 20 1a cb 4f 20 27 cb 47 20 1a 18 dd 1d 18 01 1c 7b 18 0b 3e f0 18 02 3e 10 83 18 01 af 5f 23 cd 26 dd 18 bf 7a cd 9d 30 7b 02 cd ad 30 3e ed 77 0b 0b c9 クリスタル(書き込み先はD2B1h~) cd c5 32 11 c0 4d 21 00 90 01 22 3e cd c6 0d cd c5 0f cd 3b 0e cd 49 0e cd cc 31 f0 9d f5 21 94 d4 2a 47 2a 4f 56 3e ed ea e2 c4 c5 7a cd 9d 2f d7 21 a0 c4 cd 10 d3 d5 11 14 00 19 d1 1e 10 78 cd 10 d3 79 cd 10 d3 23 0a cd 10 d3 03 d5 11 0d 00 19 d1 1d 20 e9 c1 cd ad 2f cd 21 d3 18 cc c5 0e 02 47 cb 30 3e 0f a0 c6 f6 22 0d 20 f5 c1 c9 c5 cd 1b 35 c1 67 f0 a9 cb 5f 20 1e cb 57 20 30 cb 7c 20 3e cb 74 20 3c cb 6c 20 3a cb 64 20 3b cb 4c 20 3e cb 44 20 6c 18 d6 cb 7c 20 4b cb 74 20 49 cb 6c 20 47 cb 64 20 47 cb 44 20 30 18 e0 cb 7c 20 42 cb 74 20 40 cb 6c 20 3e cb 64 20 3f 18 ce 03 c9 0b c9 21 f0 ff 18 03 21 10 00 09 44 4d c9 21 94 d4 78 22 79 22 72 f1 f1 d7 c9 c5 d5 7a 21 02 00 09 cf d1 c1 c9 15 c9 14 c9 3e f0 18 02 3e 10 82 57 c9 05 c9 04 c9 21 00 f0 18 cf 21 00 10 18 ca 03 03 0a 5f 21 e2 c4 3e ec 77 c5 cd 1e 35 c1 cb 7f 20 1a cb 77 20 19 cb 6f 20 19 cb 67 20 19 cb 57 20 1a cb 4f 20 27 cb 47 20 1a 18 dd 1d 18 01 1c 7b 18 0b 3e f0 18 02 3e 10 83 18 01 af 5f 23 cd 10 d3 18 bf 7a cd 9d 2f 7b 02 cd ad 2f 3e ed 77 0b 0b c9 表形式でまとめたものは別ページへ。 バイナリエディタ(flag3式、185バイト) 参考資料 ポケモン金銀にバイナリエディタを移植したお話 - flag3833753 ポケモンクリスタルにおけるバイナリエディタ - flag3833753 ポケモン金 バイナリエディタ起動RTA チャート - flag3833753 ニューゲームから始めるバイナリエディタ導入の参考に。こちらのチャートでは図鑑モード06hから親名「てパま」を参照し、メールの31文字目に飛ばしている。 ポケモン金銀 バイナリエディタ起動 SRAM Glitch チャート - flag3833753 こちらはセーブ中リセットを最低2回は行うことになるが、キキョウジム攻略までで可能になるチャート。やはり図鑑モード06hから親名「てパま」を参照している。 ポケモンクリスタル バイナリエディタ起動 チャート - flag3833753 ライバル命名までで可能になるチャート。クリスタル特有の0x1500制御コードを利用して図鑑モードを0Chに書き換える。セーブ中リセットを最低1回は行う。 【クリスタル版】通信不要・お手軽30分!バイナリエディタ作成チャート解説【バグ技 任意コード実行】 - YouTube 上記の動画版。実際のリセットタイミングやバイナリエディタの挙動を映像で確認できる。 概要 2023/10/4更新:ROMバンク切り替え機能が追加されました。 こちらは初代のバイナリエディタを金銀に移植する形で作られたもので、操作感覚は初代のものに近い。(十字キーの長押し対応とsRAMバンクの切り替え機能が付いたぐらい) サイズはTeraman式の半分程度で、手軽に導入できるのが利点。 開始位置の保存機能やROMバンクの切り替え機能はついていない。ROMバンクを切り替えたいときはaレジスタにバンク番号を入れてrst 10を実行することになる。(例:3E xx D7 C9) ROM及びsRAMバンクナンバーはおかあさんの名前の「あ」の部分に保存するようになっている。(そのため、初期値はB1となる)バグ図鑑モードからの起動だと10h、分類違いわざマシンでの起動だと03hで始まる。 実行用コード SRAM内にあるままだと実行時に不便なため、WRAM内の適当なアドレスに内容をコピーして使用する。 コピー先として使用するDCC6h~(金銀、DD7Fhまで使用)、D2B1h~(クリスタル、D36Ahまで使用)は戦闘時に敵パーティの中身が入る領域。非戦闘時には自由に利用できる。 金銀版の開始位置がTeraman式と異なることに注意。 ※AAB4hからのコピーなので、AA94hからコピーする場合は「ガヲぜえ」の「え」を「ナ」にする。 金銀 ョぺぶぶぶヅにわがヲぜえへマだ空 ゾけへよだへャだてにわ空空空だっ ※空空空だっはCF40hから実行する場合のみ必要。 クリスタル ョぶぺぶぶヅあめがヲぜえへマぞ空 ゾけへ/ぞへャぞてあめ空空空だっ メールでの実行が確認出来たら簡易型バイナリエディタは不要になるので、ボックスからの実行にするといちいちメールを読む必要がなくなり、他のメール使用コードを持ち運びやすくなる…かも。 金銀 ョぺぶぶがヲぜえ ヅにわぶヘマだゆ むゾけへよだ空空 へャだてにわ クリスタル(始点はDB68h) ョぶぺぶがヲぜえ ヅあめぶヘマぞゆ むゾこへォぞ空空 へャぞてあめ 金銀版の場合は以下のニョロボンを作って手持ち3匹目に置くと、わざマシン17から一発でバイナリエディタに飛べる。 経験値や努力値にコードを書きこんでいる関係上、戦闘で経験値が入ると崩壊することに注意。 flag3式バイナリエディタ実行用ニョロボン 内容 数値 ニモニック 種族 ニョロボン 3E ld a,03 持ち物 ひかりのこな 03 技1 ころがる CD call 309D 技2 いわなだれ 9D 技3 ちょうおんぱ 30 技4 たいあたり 21 ld hl,AAB4 ID 46250 B4 AA 経験値 112896 (Lv.49) 01 ld bc,00B9 B9 00 H努力値 4550 (H157) 11 ld de,DCC6 C6 A努力値 56525 (A128) DC CD call 30D6 B努力値 54832 (B132) D6 30 S努力値 52653 (S114) CD call 30AD AD C努力値 12483 (C99/D118) 30 C3 jp DCC6 AB個体値 A12/B6 C6 SC個体値 S13/C12 DC クリスタル版の場合は分類違いわざマシンの実行位置に以下のコードを書き込むのも有効。(21バイト) 3E 03 CD 9D 2F 21 B4 AA 11 B1 D2 01 B9 00 D5 CD F2 2F C3 AD 2F ; ld a,03→call 2F9D→ld hl,AAB4→ld de,D2B1→ld bc,00B9→push de→call 2FF2→call 2FAD 画面表示 左から順に、 ROM、sRAMバンクナンバー(sRAMバンクナンバーは表記上00h~ffhまでに見えるが、中身は00h~0fhをループしている。) アドレス カーソル 左のアドレスに格納されている値 操作方法 キー 操作 上 アドレスを-01h 下 アドレスを+01h 左 アドレスを-10h 右 アドレスを+10h B+上 アドレスを-100h B+下 アドレスを+100h B+左 アドレスを-1000h B+右 アドレスを+1000h SELECT+上 バンクを+01h SELECT+下 バンクを-01h SELECT+左 バンクを-10h SELECT+右 バンクを+10h SELECT+A カーソル位置のプログラム実行 A+下 数値を+01h A+上 数値を-01h A+左 数値を-10h A+右 数値を+10h START バイナリエディタを終了 書き込むコード (金銀) DCC6 CD A8 34 11 B2 4E 21 00 90 01 23 3E CD 76 0E CD 87 0D CD 95 0D AF 3C E0 D6 F0 9F F5 21 00 D0 CD 24 DD E5 11 F8 FF 19 E5 D1 21 A9 C3 F0 9F D7 CD 9D 30 CD 72 DD 01 0C 00 36 7C 23 7A CD 72 DD 7B CD 72 DD 36 7F 23 1A CD 72 DD 13 36 7C 09 7C FE C5 20 E5 CD AD 30 3E ED EA 4B C4 E1 18 C1 CD F4 36 F0 AB 5F 01 01 00 07 38 14 0B 0B 07 38 0F 0E F0 07 38 0A 01 10 00 07 38 04 48 07 38 09 CB 53 28 0F CB 43 28 05 E9 E1 F1 D7 C9 F0 9F 81 E0 9F C9 79 CB 43 20 06 CB 4B 20 0F 09 C9 F5 F0 9F CD 9D 30 F1 86 77 CD AD 30 C9 84 67 C9 F5 CB 37 CD 79 DD F1 E6 0F C6 F6 22 C9 (クリスタル) D2B1 CD C5 32 11 C0 4D 21 00 90 01 22 3E CD C6 0D CD 3B 0E CD 49 0E AF 3C E0 D4 F0 9D F5 21 00 D0 CD 0F D3 E5 11 F8 FF 19 E5 D1 21 A9 C4 F0 9D D7 CD 9D 2F CD 5D D3 01 0C 00 36 7C 23 7A CD 5D D3 7B CD 5D D3 36 7F 23 1A CD 5D D3 13 36 7C 09 7C FE C6 20 E5 CD AD 2F 3E ED EA 4B C5 E1 18 C1 CD 1B 35 F0 A9 5F 01 01 00 07 38 14 0B 0B 07 38 0F 0E F0 07 38 0A 01 10 00 07 38 04 48 07 38 09 CB 53 28 0F CB 43 28 05 E9 E1 F1 D7 C9 F0 9D 81 E0 9D C9 79 CB 43 20 06 CB 4B 20 0F 09 C9 F5 F0 9D CD 9D 2F F1 86 77 CD AD 2F C9 84 67 C9 F5 CB 37 CD 64 D3 F1 E6 0F C6 F6 22 C9 表形式でまとめたものは別ページへ。 簡易型バイナリエディタ(Teraman式) 参考資料(最新版の情報あり) 簡単!?バイナリエディタ導入! ポケモン第二世代任意コード実行講座 Part.08【VOICEROID紲星あかり】 動画で解説している方法についての補足。事前にメールとボックス両方からコードを実行できるようにしておく必要がある点に注意。 特にクリスタルは図鑑モード42hから実行しており、図鑑モード0Chには対応していない。図鑑モード42hのセットアップは以下の動画を参考に。 ポケモン第二世代任意コード実行講座 Part.04【VOICEROID紲星あかり】 - YouTube ボックス入力1 まずは、以下の内容をボックスに書き込む。これは直接実行するためのものではなく、育て屋と虫取り大会の領域にコピーして使うものとなる。 金銀1 へォ※ぞひ空ぐぎ グひ空ぐだグひ空 ぐずグひ空ぐビグ グペひ空ぐゼグひ 空ぐデグひ空ぐヅ ひパたちてャだド のョべだゼぼヂぐ ごョぶだガブのぼ ゅダペピアデの ※には適当な文字を入れておく。 ボックス入力後、以下のメールでコードを実行する。 ぼブグヅえりデの これにより、※の部分が「わたし」に書き換わる。 クリスタル1 へブ※ぞひ空ぐぎ グひ空ぐだグひ空 ぐずグひ空ぐビグ グペひ空ぐゼグひ 空ぐデグひ空ぐヅ ひパたちてャぞド のョべだゼぼヂぐ ごョぶだガブのぼ ゅダペピアデの ※には適当な文字を入れておく。 ボックス入力後、以下のメールでコードを実行する。 ぼヒグヅルろひでデの これにより、※の部分が「ばん どうろ」に書き換わる。 ボックスの入力が終わったら、今度はこのコードをコピーするメールを作成して実行する。 コピー用メール ボックス1~9の名前を(終端文字を抜いて)育て屋や虫取り大会の領域にコピーするコード 金銀 がりぜいヅガわョペゾゲへよだそひ ズゴぼギダすつぐまの クリスタル がろぜみひゼヅガわョぶペゾゲそひ へ/ぞズゴぼけすつジみの ボックス入力2 コピーが終わったら、今度はバイナリエディタのメインループ部分を作成する。 金銀2 ヅぬわがノぜゼプ ビヘぼまざョエ へぼまへガわョプ だ? ボックス2の末尾は空白でも何も入力しなくてもいい。 クリスタル2 へなづヅあめ空プ がなぜコビへガみ ざョエへガみプ へきんョだ? ボックス3の末尾は空白でも何も入力しなくてもいい。 バッグからの実行の場合、「へなづ」は不要? 不整合を防ぐために空白で埋めておくべきか。 ボックスの入力が終わったら、以下のメールを読んでからボックス実行する。 実行用メール(ただし実行はボックスから) ボックスだけでは足りない画面表示部のルーチンを最後に読んだメールに仕込むためのコード。 文頭に「の」が付いているため、メール実行では何も起こらない。 金銀 のののなぺゾ9ぼダメに0だガそひ よメづひだズはぐまちョのそぐー クリスタル のののなゾアぺぼダメに0だガそひ よメズづひだひピつゴみちョの ここまで正しくできていれば、このメールを読んでボックスからの実行を行うことで簡易型バイナリエディタが起動するはず。 指すアドレスの初期位置は金銀だとDCC7h、クリスタルではD2B1hからになる。 数値の対応表 数値(文字) バッグ 図鑑 A ■ g B ▲ 青色の線 C 携帯マーク 携帯マーク 操作方法 キー 操作 上 アドレスを-01h 下 アドレスを+01h 左 数値を-10h 右 数値を-01h B 数値を+10h A 数値を-01h START SERECT 簡易型バイナリエディタを終了 簡易型バイナリエディタが起動出来たら、wRAM内にバイナリエディタ本体のコードを書き込み、金銀では「てぬわ」、クリスタルでは「てあめ」でコードを実行することでバイナリエディタを起動できる。 …が、先に下記のメールを用意しておいた方がいいだろう。(入力中は戦闘を行わないこと!) バイナリエディタのコピー Teraman式での入力はwRAM内に直接書き込むが、書いている領域がクリスタルだとセーブされないという事情もあり、完成した時や入力を中断したいときはセーブデータ内に退避させておく必要がある。 そこで、wRAM→ボックス9へのコピー及びその逆を行うコードを用意しておく。動画では03h AA94hから書き込んでいるが、預け数が異常になってまともに見られなくなるので(他との記述を統一するためにも)03h AAB4hから書き込み始めることにしておく。 退避:wRAM→ボックス9(03h AAB4h) 金銀 ョぶぺぶぶヅえヲがわぜぬへマだ空 ゾパひァへよだてャだ クリスタル ョぶぶぺぶヅえヲがめぜあへマぞ空 ゾパひァへ/ぞてャぞ 復元:ボックス9(03h AAB4h)→wRAM 金銀 ョぶぺぶぶヅぬわがヲぜえへマだ空 ゾパひァへよだてャだ クリスタル ョぶぶぺぶヅあめがヲぜえへマぞ空 ゾパひァへ/ぞてャぞ 預け数を30匹にしておきたい場合(AAB3hにFFhも入れておく) 金銀 ぼギダヅナヲへマだぼグダデひひブ ョべデてャだ クリスタル ぼギダヅナヲへマぞぼグダデひひブ ョべデてャぞ 簡易型バイナリエディタ旧版(クリスタル専用) 今この方法をとる必要はない、旧時代の資料 導入準備 以下のメールを準備。 がりぜクごぺぽじごぺなむじごデざ ョべづぜクどたじじどの空空空だっ どうぐポケット1番目の個数をアドレス下位、2番目の個数をアドレス上位とし、3番目の個数をそのアドレスに書き込むコード。 書き込み後、道具ポケット3番目の個数を255個にし、次のアドレスを指すようにしているため連続で入力できる。 なお、最初に道具ポケット1~3番目の個数を255個にするには以下のコードを使用する。実行前に適当なアイテムを並べておくこと。 がりぜショべづざづざづの空空空空 空空空空空空空空空空空空空空だっ 簡易型バイナリエディタ 上記のコードを用いて以下のコードを書き込む。(長いので最後に) 「育て屋爺さんが預かっているポケモン」「育て屋婆さんが預かっているポケモン」「育て屋が預かっているタマゴの中身」「虫取り大会で捕まえたポケモン」 の領域に書き込んでいることに注意。特に育て屋の婆さんに関しては「話しかけたことがあるフラグ」の領域も使用しているため話しかけることすらしてはいけない。虫取り大会も参加するだけでアウト。 書き込み終わったら以下のコードで実行?(ボックス、メールどちらでもおk) がわひしョオぜマ ひすまてサん 画面表示 左から順に、 sRAMバンクナンバー(表記上は00h~ffhまでに見えるが、中身は00h~0fhをループしている。) 現在のアドレス 現在のアドレスの中身 書き込みモード時であることを示す表示、書き込みモード時以外は表示されないか黒い三角となる。 一度に1バイトずつしか表示されないのは上述のflag3式同様。 操作方法 通常モード キー 操作 上 アドレスを-01h 下 アドレスを+01h 左 アドレスを-10h 右 アドレスを+10h START sRAMバンクを+01h SERECT sRAMバンクを-01h A 書き込みモードに移行 B バイナリエディタを終了 書き込みモード キー 操作 上 数値を+01h 下 数値を-01h 左 数値を-10h 右 数値を+10h SERECT 数値を00hにする A 数値を書き込む B 書き込みをキャンセル 以降はこれを利用して上述の豪華版バイナリエディタをD2B1hから書き込む。 ちなみにこの簡易型バイナリエディタも最新版では導入方法が変わり、ボックスからデータをコピーする形で作成するようになった。 簡易型バイナリエディタ旧版本体 1番目個数 2番目個数 3番目個数 アドレス 値 138 222 205 DE8A CD 139 222 178 DE8B B2 140 222 15 DE8C 0F 141 222 6 DE8D 06 142 222 208 DE8E D0 143 222 87 DE8F 57 144 222 33 DE90 21 145 222 70 DE91 46 146 222 197 DE92 C5 147 222 122 DE93 7A 148 222 205 DE94 CD 149 222 157 DE95 9D 150 222 47 DE96 2F 151 222 205 DE97 CD 152 222 73 DE98 49 153 222 222 DE99 DE 154 222 35 DE9A 23 155 222 120 DE9B 78 156 222 205 DE9C CD 157 222 173 DE9D AD 158 222 222 DE9E DE 159 222 121 DE9F 79 160 222 205 DEA0 CD 161 222 173 DEA1 AD 162 222 222 DEA2 DE 163 222 35 DEA3 23 164 222 10 DEA4 0A 165 222 205 DEA5 CD 166 222 173 DEA6 AD 167 222 222 DEA7 DE 168 222 205 DEA8 CD 169 222 198 DEA9 C6 170 222 222 DEAA DE 171 222 24 DEAB 18 172 222 227 DEAC E3 173 222 197 DEAD C5 174 222 14 DEAE 0E 175 222 2 DEAF 02 176 222 71 DEB0 47 177 222 203 DEB1 CB 178 222 48 DEB2 30 179 222 62 DEB3 3E 180 222 15 DEB4 0F 181 222 24 DEB5 18 182 222 2 DEB6 02 1番目個数 2番目個数 3番目個数 アドレス 値 185 222 160 DEB9 A0 186 222 198 DEBA C6 187 222 246 DEBB F6 188 222 48 DEBC 30 189 222 2 DEBD 02 190 222 214 DEBE D6 191 222 160 DEBF A0 192 222 34 DEC0 22 193 222 13 DEC1 0D 194 222 32 DEC2 20 195 222 237 DEC3 ED 196 222 193 DEC4 C1 197 222 201 DEC5 C9 198 222 197 DEC6 C5 199 222 205 DEC7 CD 200 222 27 DEC8 1B 201 222 53 DEC9 35 202 222 193 DECA C1 203 222 203 DECB CB 204 222 127 DECC 7F 205 222 32 DECD 20 206 222 29 DECE 1D 207 222 203 DECF CB 208 222 119 DED0 77 209 222 32 DED1 20 210 222 27 DED2 1B 211 222 203 DED3 CB 212 222 111 DED4 6F 213 222 32 DED5 20 214 222 25 DED6 19 215 222 203 DED7 CB 216 222 103 DED8 67 217 222 32 DED9 20 218 222 23 DEDA 17 219 222 203 DEDB CB 220 222 95 DEDC 5F 221 222 32 DEDD 20 222 222 21 DEDE 15 223 222 203 DEDF CB 224 222 87 DEE0 57 225 222 32 DEE1 20 226 222 19 DEE2 13 227 222 203 DEE3 CB 228 222 79 DEE4 4F 229 222 32 DEE5 20 230 222 17 DEE6 11 231 222 203 DEE7 CB 232 222 71 DEE8 47 233 222 32 DEE9 20 234 222 17 DEEA 11 235 222 201 DEEB C9 236 222 11 DEEC 0B 237 222 201 DEED C9 238 222 3 DEEE 03 239 222 201 DEEF C9 240 222 5 DEF0 05 241 222 201 DEF1 C9 242 222 4 DEF2 04 243 222 201 DEF3 C9 244 222 20 DEF4 14 245 222 201 DEF5 C9 246 222 21 DEF6 15 247 222 201 DEF7 C9 248 222 241 DEF8 F1 249 222 195 DEF9 C3 250 222 173 DEFA AD 251 222 47 DEFB 2F 252 222 33 DEFC 21 253 222 80 DEFD 50 254 222 197 DEFE C5 255 222 62 DEFF 3E 0 223 236 DF00 EC 1 223 119 DF01 77 2 223 10 DF02 0A 3 223 95 DF03 5F 4 223 24 DF04 18 5 223 11 DF05 0B 1番目個数 2番目個数 3番目個数 アドレス 値 17 223 197 DF11 C5 18 223 205 DF12 CD 19 223 27 DF13 1B 20 223 53 DF14 35 21 223 193 DF15 C1 22 223 203 DF16 CB 23 223 127 DF17 7F 24 223 32 DF18 20 25 223 14 DF19 0E 26 223 203 DF1A CB 27 223 119 DF1B 77 28 223 32 DF1C 20 29 223 13 DF1D 0D 30 223 203 DF1E CB 31 223 71 DF1F 47 32 223 32 DF20 20 33 223 18 DF21 12 34 223 203 DF22 CB 35 223 79 DF23 4F 36 223 32 DF24 20 37 223 16 DF25 10 38 223 24 DF26 18 39 223 233 DF27 E9 40 223 29 DF28 1D 41 223 24 DF29 18 42 223 1 DF2A 01 43 223 28 DF2B 1C 44 223 123 DF2C 7B 45 223 46 DF2D 2E 46 223 78 DF2E 4E 47 223 205 DF2F CD 48 223 173 DF30 AD 49 223 222 DF31 DE 50 223 24 DF32 18 51 223 221 DF33 DD 52 223 123 DF34 7B 53 223 2 DF35 02 54 223 62 DF36 3E 55 223 237 DF37 ED 56 223 119 DF38 77 57 223 201 DF39 C9 10進数版データの作成に、れんだ様の固定長配列ビューアを使用しました。
https://w.atwiki.jp/pokemonbug/pages/32.html
flag3式バイナリエディタの本体を表形式でまとめたもの。 制作方法はバイナリエディタ(第二世代)のページへ。 ※参考資料は仮置きのため、記事が完成次第削除される予定であることに注意してください。 ちなみに分類違いわざマシン用のものが186バイト、バグ図鑑モード用のものが191バイトだが、クリスタル版ではnopをスペーサーとすることで長さを統一している。 2023/9/18更新:わざマシン、バグ図鑑両方に対応しました。 2023/10/4更新:ROMバンク切り替え機能が搭載されました。サイズがちょっと(1バイト)増えています。 参考資料 memory_editor(C).asm · GitHub ソースコード。上部の(C)がクリスタル用、下部の(GS)が金銀用。 ポケモン金銀にバイナリエディタを移植したお話 - flag3 金銀の任意コード実行環境を利用して簡易型バイナリエディタを作成し、打ち込んで起動するまでがまとめられている。わざマシン17の使用を基本としているが、バグ図鑑モードでの実行についても触れられている。 ポケモンクリスタルにおけるバイナリエディタ - flag3 こちらはクリスタル版。図鑑モード0Chを基本としているが、分類違いわざマシンの使用についても補足されている。 ポケモン金 バイナリエディタ起動RTA チャート - flag3 ニューゲームから始めるバイナリエディタ導入の参考に。こちらのチャートでは図鑑モード06hから親名「てパま」を参照し、メールの31文字目に飛ばしている。 ポケモン金銀 バイナリエディタ起動 SRAM Glitch チャート - flag3 こちらはセーブ中リセットを最低2回は行うことになるが、キキョウジム攻略までで可能になるチャート。やはり図鑑モード06hから親名「てパま」を参照している。 ポケモンクリスタル バイナリエディタ起動 チャート - flag3 ライバル命名までで可能になるチャート。クリスタル特有の0x1500制御コードを利用して図鑑モードを0Chに書き換える。セーブ中リセットを最低1回は行う。 使用するコード(主にコードのコピー先)が少し違うため、こちらのページでも解説→バイナリエディタ(第二世代)/新バイナリエディタ(flag3式) 書き込むコード flag3式バイナリエディタ本体(185バイト) 金銀 クリスタル アドレス 数値 コピー先 アドレス 数値 コピー先 AAB4 CD DCC6 AAB4 CD D2B1 AAB5 A8 DCC7 AAB5 C5 D2B2 AAB6 34 DCC8 AAB6 32 D2B3 AAB7 11 DCC9 AAB7 11 D2B4 AAB8 B2 DCCA AAB8 C0 D2B5 AAB9 4E DCCB AAB9 4D D2B6 AABA 21 DCCC AABA 21 D2B7 AABB 00 DCCD AABB 00 D2B8 AABC 90 DCCE AABC 90 D2B9 AABD 01 DCCF AABD 01 D2BA AABE 23 DCD0 AABE 22 D2BB AABF 3E DCD1 AABF 3E D2BC AAC0 CD DCD2 AAC0 CD D2BD AAC1 76 DCD3 AAC1 C6 D2BE AAC2 0E DCD4 AAC2 0D D2BF AAC3 CD DCD5 AAC3 CD D2C0 AAC4 87 DCD6 AAC4 3B D2C1 AAC5 0D DCD7 AAC5 0E D2C2 AAC6 CD DCD8 AAC6 CD D2C3 AAC7 95 DCD9 AAC7 49 D2C4 AAC8 0D DCDA AAC8 0E D2C5 AAC9 AF DCDB AAC9 AF D2C6 AACA 3C DCDC AACA 3C D2C7 AACB E0 DCDD AACB E0 D2C8 AACC D6 DCDE AACC D4 D2C9 AACD F0 DCDF AACD F0 D2CA AACE 9F DCE0 AACE 9D D2CB AACF F5 DCE1 AACF F5 D2CC AAD0 21 DCE2 AAD0 21 D2CD AAD1 00 DCE3 AAD1 00 D2CE AAD2 D0 DCE4 AAD2 D0 D2CF AAD3 CD DCE5 AAD3 CD D2D0 AAD4 24 DCE6 AAD4 0F D2D1 AAD5 DD DCE7 AAD5 D3 D2D2 AAD6 E5 DCE8 AAD6 E5 D2D3 AAD7 11 DCE9 AAD7 11 D2D4 AAD8 F8 DCEA AAD8 F8 D2D5 AAD9 FF DCEB AAD9 FF D2D6 AADA 19 DCEC AADA 19 D2D7 AADB E5 DCED AADB E5 D2D8 AADC D1 DCEE AADC D1 D2D9 AADD 21 DCEF AADD 21 D2DA AADE A9 DCF0 AADE A9 D2DB AADF C3 DCF1 AADF C4 D2DC AAE0 F0 DCF2 AAE0 F0 D2DD AAE1 9F DCF3 AAE1 9D D2DE AAE2 D7 DCF4 AAE2 D7 D2DF AAE3 CD DCF5 AAE3 CD D2E0 AAE4 9D DCF6 AAE4 9D D2E1 AAE5 30 DCF7 AAE5 2F D2E2 AAE6 CD DCF8 AAE6 CD D2E3 AAE7 72 DCF9 AAE7 5D D2E4 AAE8 DD DCFA AAE8 D3 D2E5 AAE9 01 DCFB AAE9 01 D2E6 AAEA 0C DCFC AAEA 0C D2E7 AAEB 00 DCFD AAEB 00 D2E8 AAEC 36 DCFE AAEC 36 D2E9 AAED 7C DCFF AAED 7C D2EA AAEE 23 DD00 AAEE 23 D2EB AAEF 7A DD01 AAEF 7A D2EC AAF0 CD DD02 AAF0 CD D2ED AAF1 72 DD03 AAF1 5D D2EE AAF2 DD DD04 AAF2 D3 D2EF AAF3 7B DD05 AAF3 7B D2F0 AAF4 CD DD06 AAF4 CD D2F1 AAF5 72 DD07 AAF5 5D D2F2 AAF6 DD DD08 AAF6 D3 D2F3 AAF7 36 DD09 AAF7 36 D2F4 AAF8 7F DD0A AAF8 7F D2F5 AAF9 23 DD0B AAF9 23 D2F6 AAFA 1A DD0C AAFA 1A D2F7 AAFB CD DD0D AAFB CD D2F8 AAFC 72 DD0E AAFC 5D D2F9 AAFD DD DD0F AAFD D3 D2FA AAFE 13 DD10 AAFE 13 D2FB AAFF 36 DD11 AAFF 36 D2FC AB00 7C DD12 AB00 7C D2FD AB01 09 DD13 AB01 09 D2FE AB02 7C DD14 AB02 7C D2FF AB03 FE DD15 AB03 FE D300 AB04 C5 DD16 AB04 C6 D301 AB05 20 DD17 AB05 20 D302 AB06 E5 DD18 AB06 E5 D303 AB07 CD DD19 AB07 CD D304 AB08 AD DD1A AB08 AD D305 AB09 30 DD1B AB09 2F D306 AB0A 3E DD1C AB0A 3E D307 AB0B ED DD1D AB0B ED D308 AB0C EA DD1E AB0C EA D309 AB0D 4B DD1F AB0D 4B D30A AB0E C4 DD20 AB0E C5 D30B AB0F E1 DD21 AB0F E1 D30C AB10 18 DD22 AB10 18 D30D AB11 C1 DD23 AB11 C1 D30E AB12 CD DD24 AB12 CD D30F AB13 F4 DD25 AB13 1B D310 AB14 36 DD26 AB14 35 D311 AB15 F0 DD27 AB15 F0 D312 AB16 AB DD28 AB16 A9 D313 AB17 5F DD29 AB17 5F D314 AB18 01 DD2A AB18 01 D315 AB19 01 DD2B AB19 01 D316 AB1A 00 DD2C AB1A 00 D317 AB1B 07 DD2D AB1B 07 D318 AB1C 38 DD2E AB1C 38 D319 AB1D 14 DD2F AB1D 14 D31A AB1E 0B DD30 AB1E 0B D31B AB1F 0B DD31 AB1F 0B D31C AB20 07 DD32 AB20 07 D31D AB21 38 DD33 AB21 38 D31E AB22 0F DD34 AB22 0F D31F AB23 0E DD35 AB23 0E D320 AB24 F0 DD36 AB24 F0 D321 AB25 07 DD37 AB25 07 D322 AB26 38 DD38 AB26 38 D323 AB27 0A DD39 AB27 0A D324 AB28 01 DD3A AB28 01 D325 AB29 10 DD3B AB29 10 D326 AB2A 00 DD3C AB2A 00 D327 AB2B 07 DD3D AB2B 07 D328 AB2C 38 DD3E AB2C 38 D329 AB2D 04 DD3F AB2D 04 D32A AB2E 48 DD40 AB2E 48 D32B AB2F 07 DD41 AB2F 07 D32C AB30 38 DD42 AB30 38 D32D AB31 09 DD43 AB31 09 D32E AB32 CB DD44 AB32 CB D32F AB33 53 DD45 AB33 53 D330 AB34 28 DD46 AB34 28 D331 AB35 0F DD47 AB35 0F D332 AB36 CB DD48 AB36 CB D333 AB37 43 DD49 AB37 43 D334 AB38 28 DD4A AB38 28 D335 AB39 05 DD4B AB39 05 D336 AB3A E9 DD4C AB3A E9 D337 AB3B E1 DD4D AB3B E1 D338 AB3C F1 DD4E AB3C F1 D339 AB3D D7 DD4F AB3D D7 D33A AB3E C9 DD50 AB3E C9 D33B AB3F F0 DD51 AB3F F0 D33C AB40 9F DD52 AB40 9D D33D AB41 81 DD53 AB41 81 D33E AB42 E0 DD54 AB42 E0 D33F AB43 9F DD55 AB43 9D D340 AB44 C9 DD56 AB44 C9 D341 AB45 79 DD57 AB45 79 D342 AB46 CB DD58 AB46 CB D343 AB47 43 DD59 AB47 43 D344 AB48 20 DD5A AB48 20 D345 AB49 06 DD5B AB49 06 D346 AB4A CB DD5C AB4A CB D347 AB4B 4B DD5D AB4B 4B D348 AB4C 20 DD5E AB4C 20 D349 AB4D 0F DD5F AB4D 0F D34A AB4E 09 DD60 AB4E 09 D34B AB4F C9 DD61 AB4F C9 D34C AB50 F5 DD62 AB50 F5 D34D AB51 F0 DD63 AB51 F0 D34E AB52 9F DD64 AB52 9D D34F AB53 CD DD65 AB53 CD D350 AB54 9D DD66 AB54 9D D351 AB55 30 DD67 AB55 2F D352 AB56 F1 DD68 AB56 F1 D353 AB57 86 DD69 AB57 86 D354 AB58 77 DD6A AB58 77 D355 AB59 CD DD6B AB59 CD D356 AB5A AD DD6C AB5A AD D357 AB5B 30 DD6D AB5B 2F D358 AB5C C9 DD6E AB5C C9 D359 AB5D 84 DD6F AB5D 84 D35A AB5E 67 DD70 AB5E 67 D35B AB5F C9 DD71 AB5F C9 D35C AB60 F5 DD72 AB60 F5 D35D AB61 CB DD73 AB61 CB D35E AB62 37 DD74 AB62 37 D35F AB63 CD DD75 AB63 CD D360 AB64 79 DD76 AB64 64 D361 AB65 DD DD77 AB65 D3 D362 AB66 F1 DD78 AB66 F1 D363 AB67 E6 DD79 AB67 E6 D364 AB68 0F DD7A AB68 0F D365 AB69 C6 DD7B AB69 C6 D366 AB6A F6 DD7C AB6A F6 D367 AB6B 22 DD7D AB6B 22 D368 AB6C C9 DD7E AB6C C9 D369
https://w.atwiki.jp/yeng/pages/20.html
バイナリーオプションの手法を色々述べていますが、 何よりも頼りになるのは自分で事前に調べた情報です。 ただ、最近では情報が溢れすぎて本当に必要な情報を 見極めるのがなかなか難しいのも確かです。 変な情報に惑わされることがないよう、基本的なものとして 調べておきたいものをまとめた、バイナリーオプションの攻略 サイトを見つけたので、参考までに載せておきます。 情報社会を勝ち抜くために、自分の知識を確実なものにしましょう!
https://w.atwiki.jp/ttmario64/pages/61.html
ここはバイナリエディタで変更できる文章、ステージ名の場所をみんなで探していくところです。 現在はSM64 Text Managerが登場したことで、より簡単に文章が変更できるようになりました。 41 :名無しさん@お腹いっぱい。:2008/04/15(火) 22 52 17 ID ewwLoIPq 例 セーブデータ選択画面の文字 アドレス 258258 16 0A 1B 12 18 9E 0A →15 1E 12 13 12 9E 0A MARIO A → LUIJI A になる 桃姫からの手紙 80BED2 0D 28 24 35 9E 16 24 35 2C 32 E6 D e a r m a r i o スコアやコピー画面の文字 258214: 1B 0E 1D 1E 1B 17 R E T U R N : コピーやデータ消去画面の文字 25821C: 0C 11 0E 0C 14 9E 1C 0C 18 1B 0E C H E C K S C O R E
https://w.atwiki.jp/pokemonbug/pages/26.html
メモリエディタ、RAMエディタとも。 RAMを自由自在に編集できるプログラム。任意コード実行の最高到達点の一つ。 これがあればもはや書き換え系のコードをいちいち作成する必要性がなくなり、任意コード実行用のプログラムの書き込みも非常に容易になる。 思わぬ範囲まで効果が及ぶ可能性があるので危険が伴います。実験・使用・使用後のセーブには充分注意しましょう。 特にsRAMバンク01h(A000h~BFFFh)は下手に弄ると簡単にフアイルのデータが壊れます。(一応対策はされました) このページで扱うバイナリエディタにはROMバンクやSRAMバンクの切り替え機能があります。 これらの機能が不要な場合、未使用領域を使ったバージョンが公開されているのでそちらを使うことをお勧めします。 →未使用領域型バイナリエディタ 参考資料 ポケットモンスター 赤・緑・青 バイナリエディタ - flag3 上記の未使用領域型バイナリエディタの導入チャート及びその原理等の詳細な解説あり。 【初代ポケモン】お手軽20分。バイナリエディタ作成チャート解説【バグ技 任意コード実行】 - YouTube ニューゲーム(要データクリア)からバイナリエディタを作成するまでのチャート紹介および実践動画。 このページで紹介する簡易型バイナリエディタは動画と操作方法が少し違うことに注意。 ポケットモンスター ピカチュウ バイナリエディタ - flag3 ピカチュウ版でニューゲームからバイナリエディタを作成するまでのチャート。(※レポートバグ使用) このページで紹介するものとはコードの組み方が違う点に注意。 バイナリエディタ導入 森地図チャート ピカチュウ版 - flag3 ※削除予定 こちらはレポートバグ無し。トキワのもりでfifth法を利用する必要あり。 バイナリエディタ導入 毒サファリ・いあいぎりルート ピカチュウ版 - flag3 ※削除予定 既存データをそのまま流用できるバイナリエディタ導入チャート 導入 バージョンによってサブルーチンの位置が簿妙に違うため、コードを変える必要がある。 簡易型バイナリエディタ 引用 memory_editor.asm · GitHub 下記のコードをボックスの1番目から並べ、 サファリボール0個 今回の実行では育て屋フラグを利用するため、この場所は何もしないようにするのが確実。 D983 00[nop] 「あなぬけのヒモ」や「あなをほる」を使うと、サファリボールが0個になる。 この仕様自体に使用する場所は関係ないので、適当なダンジョンで使用しておけば準備完了となる。 育て屋に「ゃわてょん」を預けた状態にする。 これはbcレジスタにDCE0hを代入しつつボックス22匹目のニックネームに飛ぶ命令となる。 D984 01 E0 DC[ld bc,DEC0] D987 C3 E2 DE[jp DEE2] 「ゃわてEん」の場合はボックス1匹目のニックネームに直接飛ぶ。作り方は5かいバグのページを参考に。 の条件を満たしたうえでなかよしバッヂを使用する。3匹目のニックネームがバージョンによって異なるため注意。 なお、足りない部分を補完するため実行時にボックスのポケモンの名前が少し変わるようになっている。 2回目以降は気にせず実行しておk。 ピカチュウ版ではなかよしバッヂの代わりにかいがらバッヂを使用する。 その仕様上、預けるポケモンの数および種類にも指定がある。 コード用以外の余計なポケモンは預けない。(しっかり22匹で止める) 24匹だと余計なジャンプで暴走し、26匹だと予期せぬ場所が書き換えられて困る。 一応30匹にしてもいいが修正が面倒になる。 1~17匹目にコラッタ(A5h)またはポッポ(24h)。 必ずしもこの2種でなければならないわけではないが、1番道路で適当に乱獲すればいいので楽。 18匹目にメノクラゲ(18h)「へみんちレ」。 これは適当に21番水道などで手に入れればいい。 19匹目にウツボット(BEh)「ぼダメギて」。 ウツドンは12~15番道路に出現する(マダツボミも即進化可能)ため、これをリーフのいしで進化させればいい。 20~22匹目はニックネームさえ合えば何でもいい。 メノクラゲ→ウツボット(18 BE ; jr BE)で育て屋預けフラグまで飛び(pcをD9C6h→D984hに)、 預けフラグ(01h)と「ゃわ」(E0h DCh)でbcレジスタにDCE0を代入(01 E0 DC ; ld bc,DCE0)、 「てょん」(C3 E2 DE ; jp DEE2)で22匹目のニックネームまで飛び、「だア」(30 80 ; jr nc,80)で1匹目のニックネームに飛ぶ(pcをDEE4h→DE64hに)ようにしている。 はやぶさバッヂ使用ルートは初期・後期で微妙に手順が異なってくるためここでは触れないことにする。(はやぶさバッヂ使用チャートの動画やブログは多い) ボックス内コード がんぜルョ よヂづよく づよむづな 赤緑初期では「づよそづな」(む→そ)※67→79 青では「づよワづな」(む→ワ)※67→8F ピカチュウ初期(Ver.1.0)では「づにグづな」(よむ→にグ)※67→3F ピカチュウ後期(Ver.1.1~)では「づにゲづな」(よむ→にゲ)※67→40 ゅョダだグ ぼヂてソん ダだギムツ てソんダム キづごヅー ぱへにんぴ へにんボぷ へにんへ※5、6文字目は冒頭のコードで「Hね゜」書き換えられる。※「H」(67h)は赤緑後期の場合。 ううゾダグ※1文字目は冒頭のコードで「円」に書き換えられる。 ダめいんど ダれチんダ めしんざダ れゃわダリ だいなひだ へみんちレ ぼダメギて よザれんん よメボデの だアの※「てょん」で飛んでくる先。ここから相対ジャンプでボックス1匹目のニックネームに飛ぶ。 操作方法 簡易型バイナリエディタでは、アドレスとその値が表示される。 「ゃわ」でDCE0h(ボックス24番目のすばやさ努力値下桁)を指定するので初期状態のアドレス表示はDCE0と表示されているはず。 なお、「ゃわ」の部分を変えることで開始位置を変えることもできる。(例:「たむてょん」を預ければ手持ち4匹目のHP努力値上桁から開始できる) あくまで育て屋に預けている状態である必要がある点には注意。 A 指すアドレスを+1h 数値を入力したらAで進めていくことになる。 B 指すアドレスを-1h 下 指しているアドレスの値を+1h 上 指しているアドレスの値を-1h 右 指しているアドレスの値を+10h 左 指しているアドレスの値を-10h SELECT アドレスDCE0hからプログラム実行。バイナリエディタが完成してから行うこと。 START 簡易型バイナリエディタを終了。長いコードを打ち込むので、セーブしながら進めるのが吉。 始点はDCE0hで固定されている点に注意。 おまけ1:バイナリエディタリセット バイナリエディタを1から書き直す場合、元の数値が残っていると入力ミスの元になることも考えられる。 そこで、簡易型バイナリエディタで実行できるリセットコードを作成してみた。 DCEBh~DDA0hの0フィル アドレス 値 ニモニック 備考 DCE0 21 ld hl,DCEB コード部分を残す必要があるので、コードの先を指定。 DCE1 EB DCE2 DC DCE3 06 ld b,B6 B6h(182)バイトの繰り返し DCE4 B6 DCE5 AF xor a aレジスタを00hにする。 DCE6 22 ldi (hl),a これでDA00hまでを00hで埋めていく。 DCE7 05 dec b bレジスタの値を1減らす。 DCE8 20 jr nz,FC bレジスタが00hになるまで DCE9 FC DCEA C9 ret コード終了。ここから下を書き換えていく。 バイナリエディタ作成 簡易版バイナリエディタができたら、それを使ってDCE0から以下の数値を書き込んでいく。 DD24h、DD73h、DD74hに書き込む値がバージョンによって異なる点に注意。 なお、このバイナリエディタはボックス24~30番目のポケモンのステータスを使用している。 引用:memory_editor_rom.asm · GitHub ※ROMバンク切り替え機能なし版:memory_editor.asm · GitHub 2024/5/7更新!SELECT+Aでの実行時、hlレジスタを変更するとフリーズする問題の対策をしました。 DD47を43→6F(DD46hのCBhと合わせてbit 0,eをbit 5,aに変更)に変えてください。(導入済みの場合は、3E 6F EA 47 DD C9 [ld a,6F→ld (DD47),a→ret]でも直せます) バイナリエディタ本体 アドレス 値 DCE0 21 DCE1 00 DCE2 D0 DCE3 CD DCE4 23 DCE5 DD DCE6 E5 DCE7 11 DCE8 F8 DCE9 FF DCEA 19 DCEB E5 DCEC D1 DCED 21 DCEE A9 DCEF C3 DCF0 CD DCF1 8E DCF2 DD DCF3 CD DCF4 7D DCF5 DD DCF6 01 DCF7 0C DCF8 00 DCF9 36 DCFA 7C DCFB 23 DCFC 7A DCFD CD DCFE 7D DCFF DD DD00 7B DD01 CD DD02 7D DD03 DD DD04 36 DD05 7F DD06 23 DD07 1A DD08 CD DD09 7D DD0A DD DD0B 13 DD0C 36 DD0D 7C DD0E 09 DD0F 7C DD10 FE DD11 C5 DD12 20 DD13 E5 DD14 3E DD15 ED DD16 EA DD17 4B DD18 C4 DD19 AF DD1A EA DD1B 00 DD1C 60 DD1D EA DD1E 00 DD1F 00 DD20 E1 DD21 18 DD22 C0 DD23 CD DD24 赤緑初期:79 赤緑後期:67 青:8F ピカ初期:3F ピカ後期:40 DD25 38 DD26 F0 DD27 B3 DD28 01 DD29 01 DD2A 00 DD2B 07 DD2C 38 DD2D 14 DD2E 0B DD2F 0B DD30 07 DD31 38 DD32 0F DD33 0E DD34 F0 DD35 07 DD36 38 DD37 0A DD38 01 DD39 10 DD3A 00 DD3B 07 DD3C 38 DD3D 04 DD3E 48 DD3F 07 DD40 38 DD41 09 DD42 CB DD43 53 DD44 28 DD45 0D DD46 CB DD47 6F DD48 28 DD49 03 DD4A E9 DD4B E1 DD4C C9 DD4D F0 DD4E B8 DD4F 81 DD50 E0 DD51 B8 DD52 C9 DD53 79 DD54 CB DD55 43 DD56 20 DD57 06 DD58 CB DD59 4B DD5A 20 DD5B 1E DD5C 09 DD5D C9 DD5E A7 DD5F C8 DD60 F5 DD61 CD DD62 8E DD63 DD DD64 F1 DD65 86 DD66 77 DD67 E5 DD68 F0 DD69 B8 DD6A F5 DD6B 3E DD6C 1C DD6D E0 DD6E B8 DD6F EA DD70 00 DD71 20 DD72 CD DD73 赤緑:69 青:59 ピカ初期:B4 ピカ後期:BF DD74 赤緑青:7C ピカチュウ:77 DD75 F1 DD76 E0 DD77 B8 DD78 E1 DD79 C9 DD7A 84 DD7B 67 DD7C C9 DD7D F5 DD7E CB DD7F 37 DD80 CD DD81 84 DD82 DD DD83 F1 DD84 E6 DD85 0F DD86 C6 DD87 F6 DD88 30 DD89 02 DD8A C6 DD8B 60 DD8C 22 DD8D C9 DD8E 3E DD8F 01 DD90 EA DD91 00 DD92 60 DD93 3E DD94 0A DD95 EA DD96 00 DD97 00 DD98 F0 DD99 B8 DD9A EA DD9B 00 DD9C 20 DD9D EA DD9E 00 DD9F 40 DDA0 C9 実行と仕上げ 打ち込みに成功していれば、簡易版バイナリエディタでSTARTを押すとバイナリエディタが起動する。 始点はDCE2とDCE1で設定されている。(デフォルトはD000h) ROMバンクとsRAMバンクは同時に変更される。(初期値は03h) 操作方法 キー 操作 上 アドレスを-01h 下 アドレスを+01h 左 アドレスを-10h 右 アドレスを+10h B+上 アドレスを-100h B+下 アドレスを+100h B+左 アドレスを-1000h B+右 アドレスを+1000h SELECT+上 バンクを+01h SELECT+下 バンクを-01h SELECT+左 バンクを-10h SELECT+右 バンクを+10h SELECT+A カーソル位置のプログラム実行 A+下 数値を+01h A+上 数値を-01h A+左 数値を-10h A+右 数値を+10h START バイナリエディタを終了 おまけ2:バイナリエディタを他ボックスにコピー DA00hから実行するような巨大なコードを複数保存したい場合、バイナリエディタごと他のボックスにコピーするのが有効。バックアップという点でも重要。 手順 コピー先のボックスに一度切り替える。(念のため) 未使用のボックスの場合、初めて切り替えた時に初期化処理が行われるため。 コピー元のボックスに切り替える。 バイナリエディタを起動し、アドレスD51Fhの値をコピー先のボックスに合わせて書き換える。 1:80 / 2:81 / 3:82 / 4:83 / 5:84 / 6:85 / 7:86 / 8:87 上桁の8は初期化済みを示すもので、下桁はボックスの番号より1少なくなると覚えておけばいい。 書き換えたら、現在ボックスがコピー先のボックスになっているので、コピー元のボックスにもう一度切り替える。 ここを間違えると逆にコッピ―元のボックスが消えるので注意。 コピー元のボックスでバイナリエディタを起動し、アドレスD2B9hの値を1Eに書き換える。 これで、コピー元のボックスのボールマークが復活する。 バイナリエディタを直接起動できるようにする 動作確認ができたら、バイナリエディタを直接起動できるようにすると便利。 また、ボックスの中身が変わるとバイナリエディタが崩壊するので、D9B2hを1Eに書き換えてポケモンを追加できないようにしておくと安心。 赤緑青の場合 育て屋に預けるポケモンを「パパてゃわ」に変えることで、サファリボールや育て屋の状態にかかわらずバイナリエディタを直接起動できるようになる。 具体的にはD985h~を以下のように書き換える。 名前変更 アドレス 値 文字 D985 40 パ D986 40 パ D987 C3 て D988 E0 ゃ D999 DC わ ピカチュウの場合 D9B2h~を以下のように書き換える。 書き換え箇所 アドレス 値 備考 D9B2 1E 30匹預けていることにして崩壊防止 D9B3 A5 ここは即値(ld a,xxの「xx」)として使うため元のままでいい。 ポッポの場合は24になっているが変更する必要はない。 D9B3 C3 以下3匹は(見た目だけ)バグポケモン(ここは「アム゛」)になるので強さを見るのは避ける。 D9B4 E0 ポケスタで見ると中身の種族に見えてしまうが、 ボックスの中身を弄らなければ書き換えられることはない。 D9B5 DC 「ゃパ」というバグポケモンだったり ピカチュウバージョンではかいがらバッヂを手に入れる過程で道具周りのデータを破損させたりするため、そちらのリカバリーも行うこと。 例:毒サファリいあいぎりルートの場合はD4B9hを32に戻したり、D525hを1足しておく。 おまけ3:ROMバンクの切り替え法(バンク切り替え機能がある場合は不要) アドレス4000h~7FFFhにはROMデータの一部が格納されている。 バイナリエディタを起動した時点のROMバンクは03hになっているが、ROMバンク自体は01h~1Fhまで存在する(殿堂入りのプログラムはバンク1Chに入っている) ROMバンクを切り替えてデータを見たい場合は2000hとFFB8hに書き換えたいバンクの番号を入れる必要がある。 バイナリエディタ上で適当な場所(D000hでも一応おk)に以下のコードを書き込み、コードの先頭にカーソルを合わせてSELECTを押すと、指定したバンクの4000hからデータを見ることができる。 コード例 数値 ニモニック 備考 3E ld a,xx xx 即値 切り替えたいバンクの番号を入れる EA ld (2000),a 2000hにバンク番号を代入 00 即値 20 即値 E0 ld (FF00+B8),a FFB8hにバンク番号を代入 B8 即値 21 ld hl,4000 00 即値 この数値を変えることでバイナリエディタの始点を変えられる 40 即値 C9 ret 処理を終了してバイナリエディタに戻る おまけ4:パソコン型バイナリエディタ ※過去の遺物。(ピカチュウ版では応用できるかもしれないが) これを導入すると育て屋が使えなくなるため、現在ではイベントフラグの未使用領域(セーブもされる)を利用したバイナリエディタの導入を推奨。 →未使用領域型バイナリエディタ こちらならパソコンを解放でき、書き込み箇所もまとまっているので簡易型バイナリエディタで導入できる。 今回作成したバイナリエディタはボックスのポケモン内に本体があるため、ボックスを切り替えて実行するようなことができない。 そこで、育て屋の領域とパソコンの道具を使うことでボックスの領域を自由に使えるようにするバイナリエディタも開発されている。 打ち込みはバイナリエディタで行うといいだろう。※容量が足りないため、ROMバンクの切り替え機能は入っていない。 参考:memory_editor_stored_item.asm · GitHub ※下記のコードはパソコンのデータを3バイトずらしていることに注意。変更点を緑字強調で示す。 育て屋データ アドレス 値 ニモニック 備考 D983 00 nop 1Eh(サファリボール30個)でも一応問題はない D984 00 nop 01h以上にするとD99Fh~D9A1h(経験値)が歩行で変化してしまう。 D985 21 ld hl,D000 開始アドレス設定 ピカ版の場合はここに飛ぶようにすればいい(「てカる」に対応) D986 00 ニックネーム:あ゛[無効]みへはや D987 D0 D988 CD call D4CA ※パソコン内に飛ぶ D989 CA D98A D4 D98B E5 push hl 親名:゛ヅ29パポケモン D98C 11 ld de,FFF8 D98D F8 D98E FF D98F 19 add hl,de D990 54 ld d,h D991 5D ld e,l 種族:シードラ D992 21 ld hl,C3AB 現在HP:8619 D993 AB D994 C3 引き取りレベル:195(預けた状態にできない理由でもある) D995 36 ld (hl),7C 左側の枠線を描画する部分 D996 7C タイプ1(謎) D997 23 inc hl タイプ2も存在しないタイプ D998 7A ld a,d ちからのねっこを持っていることになる…らしい D999 CD call D50A パソコンに飛ぶ D99A 0A わざマシン05、ひっかく D99B D5 わざマシン13 D99C 7B ld a,e スモッグ D99D CD call D50A 再びパソコンへ D99E 0A ID:52490 D99F D5 ここから経験値 D9A0 36 ld (hl),7F アドレスと数値の間のスペースを描画する部分 D9A1 7F D9A2 23 inc hl ここから努力値 D9A3 1A ld a(de) D9A4 CD call D50A D9A5 0A D9A6 D5 D9A7 36 ld (hl),7C 右側の枠線を描画する部分 D9A8 7C D9A9 01 ld bc,000C D9AA 0C D9AB 00 ここまで努力値 D9AC 09 add hl,bc AB個体値 D9AD 13 inc de SC個体値 D9AE 7D ld a,l ここから技PP D9AF C3 jp D4BC パソコン2番目の種類に飛ぶ D9B0 BC 参考元のコードではD4B9hで預け数に飛んでいる D9B1 D4 この先はボックスのデータ。結構ギリギリ。 パソコンデータ アドレス 値 ニモニック 備考 D4B9 31 道具49種類でできるため、預け数もそれに合わせておく。 D4BA FF 先頭にやめるを設置。 D4BB 63 特に理由もなく99個。一応やめるも引き出せてしまうので… D4BC FE cp a,13 D4BD 13 D4BE C2 jp nz,D995 左枠線描画部 D4BF 95 D4C0 D9 D4C1 3E ld a,ED D4C2 ED D4C3 EA ld (C44B),a カーソルを描画する部分 D4C4 4B D4C5 C4 D4C6 E1 pop hl D4C7 C3 jp D988 育て屋に飛ぶ D4C8 88 D4C9 D9 D4CA CD call 38※ D4CB 赤緑初期:79 赤緑後期:67 青:8F ピカ初期:3F ピカ後期:40 ※バージョンによってサブルーチンの位置が違うため、 この部分を変える必要がある。 参考元ではD4C8hであることに注意。 D4CC 38 D4CD F0 ld a,(FFB3) 入力検知部 D4CE B3 D4CF 07 rlca D4D0 30 jr nc,04 D4D6hに飛ぶことになる D4D1 04 D4D2 3E ld a,01 D4D3 01 D4D4 18 jr 1C D4F2hに飛ぶことになる。 D4D5 1C D4D6 07 rlca D4D7 30 jr nc,03 D4DChに飛ぶことになる。 D4D8 03 D4D9 9F sbc a D4DA 18 jr 16 D4F2に飛ぶことになる。 D4DB 16 D4DC 07 rlca D4DD 30 jr nc,04 D4E3hに飛ぶことになる。 D4DE 04 D4DF 3E ld a,F0 D4E0 F0 D4E1 18 jr 0F D4F2hに飛ぶことになる。 D4E2 0F D4E3 07 rlca D4E4 30 jr nc,04 D4EAhに飛ぶことになる。 D4E5 04 D4E6 3E ld a,10 D4D7 10 D4E8 18 jr 08 D4F2hに飛ぶことになる。 D4E9 08 D4EA 07 rlca D4EB 30 jr nc,02 D4EEhに飛ぶことになる。 D4EC 02 D4ED E1 pop hl D4EE C9 ret D4EF 07 rlca D4F0 D0 ret nc D4F1 E9 jp hl D4F2 CB bit 0,e D4F3 43 D4F4 28 jr z,03 D4F9hに飛ぶことになる。 D4F5 03 D4F6 86 add (hl) D4F7 77 ld (hl),a 指しているアドレスの値増減処理 D4F8 C9 ret D4F9 CB bit 1,e D4FA 4B D4FB 28 jr z,03 D500hに飛ぶことになる。 D4FC 03 D4FD 84 add h D4FE 67 ld h,a 指すアドレス上桁の増減処理 D4FF C9 ret D500 06 ld b,00 D501 00 D502 CB bit 7,a D503 7F D504 28 jr z,01 D507hに飛ぶことになる。 D505 01 D506 05 dec b D507 4F ld c,a D508 09 add,hl,bc 指すアドレス下桁の増減処理 D509 C9 ret D50A 47 ld b,a D50B CB swap a D50C 37 D50D CD call D511 D50E 11 パソコン内なのでずれを考慮 D50F D5 D510 78 ld a,b D511 E6 and a,0F D512 0F D513 C6 add a,F6 D514 F6 D515 30 jr nc,02 D519hに飛ぶことになる。 D516 02 D517 C6 add a,60 D518 60 D519 22 ldi (hl),a D51A C9 ret
https://w.atwiki.jp/mmorpg46/pages/15.html
まだない